/**
 * API Service for Location Management
 * 封装所有与设备安装位置相关的后端 API 调用。
 */
import apiClient from './axios';

/**
 * 获取设备列表（支持分页和筛选）
 * @param {object} params - 查询参数
 * @param {number} params.page - 页码 (从0开始)
 * @param {number} params.size - 每页数量
 * @param {string} [params.keyword] - 搜索关键字
 * @param {string} [params.status] - 设备状态
 * @param {number} [params.locationId] - 位置ID
 * @returns {Promise<AxiosResponse<any>>}
 */
// 【核心修正】在函数定义前添加 `export` 关键字
export const getDeviceList = (params) => {
    return apiClient.get('/devices', { params });
};

/**
 * 获取单个设备的详细信息
 * @param {number | string} id - 设备ID
 * @returns {Promise<AxiosResponse<any>>}
 */
// 【核心修正】确保此函数也被导出
export const getDeviceDetail = (id) => {
    return apiClient.get(`/devices/${id}`);
};

/**
 * 获取指定设备的AI模型列表
 * @param {number | string} id - 设备ID
 * @returns {Promise<AxiosResponse<any>>}
 */
// 【核心修正】确保此函数也被导出
export const getDeviceModels = (id) => {
    return apiClient.get(`/devices/${id}/models`);
};

/**
 * 获取指定设备的事件记录（带分页和筛选）
 * @param {number | string} id - 设备ID
 * @param {object} params - 查询参数
 * @returns {Promise<AxiosResponse<any>>}
 */
// 【核心修正】确保此函数也被导出
export const getDeviceEvents = (id, params) => {
    return apiClient.get(`/devices/${id}/events`, { params });
};

/**
 * 发送重启设备的指令
 * @param {number | string} id - 设备ID
 * @returns {Promise<AxiosResponse<any>>}
 */
// 【核心修正】确保此函数也被导出
export const rebootDevice = (id) => {
    return apiClient.post(`/devices/${id}/reboot`);
};

/**
 * 获取指定设备的视频通道列表
 * @param {number | string} id - 设备ID
 * @returns {Promise<AxiosResponse<any>>}
 */
// 【核心修正】确保此函数也被导出
export const getDeviceChannels = (id) => {
    return apiClient.get(`/devices/${id}/channels`);
};

/**
 * 获取位置树数据。
 * @param {string} [name] - 可选的名称过滤器，用于后端过滤。
 * @returns {Promise<AxiosResponse<any>>} - 返回包含位置树数据的 Promise。
 */
export const getLocationTree = (name) => {
    const params = {};
    if (name) {
        params.name = name;
    }
    return apiClient.get('/locations/tree', { params });
};

/**
 * 创建一个新的位置节点。
 * @param {object} locationData - 位置数据
 * @param {string} locationData.name - 新位置的名称
 * @param {string} [locationData.description] - 位置描述
 * @param {number | null} [locationData.parentId] - 父位置的ID，如果创建根节点则为 null。
 * @returns {Promise<AxiosResponse<any>>}
 */
export const createLocation = (locationData) => {
    return apiClient.post('/locations', locationData);
};

/**
 * 更新一个已存在的位置节点。
 * @param {number} id - 要更新的位置节点的ID。
 * @param {object} locationData - 要更新的数据
 * @param {string} locationData.name - 新的名称
 * @param {string} [locationData.description] - 新的描述
 * @returns {Promise<AxiosResponse<any>>}
 */
export const updateLocation = (id, locationData) => {
    return apiClient.put(`/locations/${id}`, locationData);
};

/**
 * 删除一个位置节点。
 * @param {number} id - 要删除的位置节点的ID。
 * @returns {Promise<AxiosResponse<any>>}
 */
export const deleteLocation = (id) => {
    return apiClient.delete(`/locations/${id}`);
};

/**
 * 【补全】创建一个新设备
 * @param {object} deviceData - 包含设备信息的表单数据
 */
export const createDevice = (deviceData) => {
    return apiClient.post('/devices', deviceData);
};

/**
 * 【补全】更新一个已存在的设备
 * @param {number | string} id - 要更新的设备ID
 * @param {object} deviceData - 包含设备信息的表单数据
 */
export const updateDevice = (id, deviceData) => {
    return apiClient.put(`/devices/${id}`, deviceData);
};

/**
 * 【补全】删除一个设备
 * @param {number | string} id - 要删除的设备ID
 */
export const deleteDevice = (id) => {
    return apiClient.delete(`/devices/${id}`);
};